//! 快速开发工具类库完整功能演示程序
//! 
//! 本示例展示了 librarys 库的所有功能模块的使用方法
//! 运行命令: cargo run --example demo --features full

use librarys::core::{string_utils, validation};
use librarys::datetime::date_utils;

#[cfg(feature = "random")]
use librarys::random::generators as random_utils;

#[cfg(any(feature = "crypto", feature = "crypto-full"))]
use librarys::crypto;

#[cfg(feature = "data")]
use librarys::data::json_utils;

#[cfg(feature = "io")]
use librarys::io::file_utils;

fn main() {
    println!("=== Rust 快速开发工具类库完整功能演示 ===\n");
    
    // 1. 字符串工具演示
    demo_string_utils();
    
    // 2. 日期时间工具演示  
    demo_date_utils();
    
    // 3. 随机数工具演示
    #[cfg(feature = "random")]
    demo_random_utils();
    
    // 4. 验证工具演示
    demo_validation();
    
    // 5. 加密工具演示
    #[cfg(any(feature = "crypto", feature = "crypto-full"))]
    demo_crypto();
    
    // 6. JSON工具演示
    #[cfg(feature = "data")]
    demo_json_utils();
    
    // 7. 文件工具演示
    #[cfg(feature = "io")]
    demo_file_utils();
    
    println!("\n=== 演示完成 ===\n");
    println!("📝 提示: 这是完整功能演示，需要使用 --features full 运行");
    println!("🔍 查看特性演示: cargo run --example features_demo --features \"datetime,crypto,data\"");
}

fn demo_string_utils() {
    println!("【字符串工具演示】");
    
    // 基本判断
    println!("is_empty(''): {}", string_utils::is_empty(""));
    println!("is_not_empty('hello'): {}", string_utils::is_not_empty("hello"));
    println!("is_chinese('你好'): {}", string_utils::is_chinese_char('你'));
    
    // 类型转换
    println!("to_int('123'): {:?}", string_utils::to_int("123"));
    println!("to_double('3.14'): {:?}", string_utils::to_double("3.14"));
    
    // 大小写转换
    println!("to_uppercase_first('hello'): {}", string_utils::to_uppercase_first("hello"));
    println!("to_lowercase_first('WORLD'): {}", string_utils::to_lowercase_first("WORLD"));
    
    // 命名风格转换
    println!("camel_case_to_underscore('userName'): {}", string_utils::camel_case_to_underscore("userName"));
    println!("underscore_to_camel_case('user_name'): {}", string_utils::underscore_to_camel_case("user_name"));
    
    println!();
}

fn demo_date_utils() {
    println!("【日期时间工具演示】");
    
    // 当前时间
    println!("当前时间戳: {}", date_utils::current_timestamp());
    
    // 闰年判断
    println!("2024年是闰年: {}", date_utils::is_leap_year(2024));
    println!("2023年是闰年: {}", date_utils::is_leap_year(2023));
    
    // 生肖和星座
    println!("2024年生肖: {}", date_utils::get_chinese_zodiac(2024));
    let zodiac = date_utils::get_zodiac(3, 15);
    println!("3月15日星座: {}", zodiac);
    
    // 月份天数
    println!("2024年2月天数: {}", date_utils::days_of_month(2024, 2));
    
    println!();
}

#[cfg(feature = "random")]
fn demo_random_utils() {
    println!("【随机数工具演示】");
    
    // 随机字符串
    println!("随机数字字符串: {}", random_utils::random_numbers(8));
    println!("随机字母字符串: {}", random_utils::random_letters(10));
    let alphanumeric_chars: Vec<char> = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".chars().collect();
    println!("随机混合字符串: {}", random_utils::random_string_from_chars(&alphanumeric_chars, 12));
    
    // 随机数字
    println!("随机整数(1-100): {}", random_utils::random_int_range(1, 100));
    println!("随机浮点数: {:.3}", random_utils::random_float_range(0.0, 1.0));
    
    // UUID
    println!("UUID: {}", validation::generate_uuid());
    
    // 随机密码
    let password = random_utils::random_password(12);
    println!("随机密码: {}", password);
    
    // 中文字符
    println!("随机中文字符: {}", random_utils::random_chinese_char());
    
    println!();
}

fn demo_validation() {
    println!("【验证工具演示】");
    
    // 基本验证
    println!("is_email('test@example.com'): {}", validation::is_email("test@example.com"));
    println!("is_phone('13812345678'): {}", validation::is_phone("13812345678"));
    println!("is_url('https://www.example.com'): {}", validation::is_url("https://www.example.com"));
    
    // 数字验证
    println!("is_integer('123'): {}", validation::is_integer("123"));
    println!("is_float('3.14'): {}", validation::is_float("3.14"));
    println!("is_positive_integer('42'): {}", validation::is_positive_integer("42"));
    
    // 中文验证
    println!("is_chinese('你好世界'): {}", validation::is_chinese("你好世界"));
    println!("is_real_name('张三'): {}", validation::is_real_name("张三"));
    
    // 掩码处理
    println!("mask_phone('13812345678'): {}", validation::mask_phone("13812345678"));
    println!("mask_id_card('123456789012345678'): {}", validation::mask_id_card("123456789012345678"));
    
    println!();
}

#[cfg(any(feature = "crypto", feature = "crypto-full"))]
fn demo_crypto() {
    println!("【加密工具演示】");
    
    let text = "Hello, Rust!";
    
    // 哈希算法
    println!("MD5('{}') = {}", text, crypto::md5_hash(text));
    println!("SHA1('{}') = {}", text, crypto::sha1_hash(text));
    println!("SHA256('{}') = {}", text, crypto::sha256_hash(text));
    
    // Base64编码（使用base64库）
    use base64::{Engine as _, engine::general_purpose};
    let encoded = general_purpose::STANDARD.encode(text);
    println!("Base64编码: {}", encoded);
    let decoded = String::from_utf8(general_purpose::STANDARD.decode(&encoded).unwrap()).unwrap();
    println!("Base64解码: {}", decoded);
    
    // HMAC签名
    if let Ok(signature) = crypto::hmac_sha256(text, "secret_key") {
        println!("HMAC-SHA256签名: {}", signature);
    }
    
    // AES加密演示
    let key = b"1234567890123456"; // 16字节密钥
    if let Ok(encrypted) = crypto::aes_encrypt(text, key) {
        println!("AES加密成功，密文长度: {} bytes", encrypted.len());
        if let Ok(decrypted) = crypto::aes_decrypt(&encrypted, key) {
            println!("AES解密结果: {}", decrypted);
        }
    }
    
    // 随机密钥生成
    println!("随机十六进制密钥: {}", random_utils::random_hex_string(32));
    
    println!();
}

#[cfg(feature = "data")]
fn demo_json_utils() {
    println!("【JSON工具演示】");
    
    // 创建示例数据
    use serde_json::json;
    
    let json_str = r#"{"name":"张三","age":30,"city":"北京","hobbies":["读书","游泳","编程"]}"#;
    let json_obj = json!({
        "name": "张三",
        "age": 30,
        "city": "北京",
        "hobbies": ["读书", "游泳", "编程"]
    });
    
    // 格式化JSON
    println!("原始JSON: {}", json_str);
    println!("美化JSON:");
    println!("{}", json_utils::prettify_json(json_str).unwrap_or_else(|_| "格式化失败".to_string()));
    
    // 最小化JSON
    let minified = json_utils::minify_json(json_str).unwrap();
    println!("最小化JSON: {}", minified);
    
    // 获取值
    println!("姓名: {:?}", json_utils::get_string(&json_obj, "name"));
    println!("年龄: {:?}", json_utils::get_i64(&json_obj, "age"));
    
    // 验证JSON
    println!("是否为有效JSON: {}", json_utils::is_valid_json(json_str));
    
    println!();
}

#[cfg(feature = "io")]
fn demo_file_utils() {
    println!("【文件工具演示】");
    
    // 文件名处理
    let file_path = "/path/to/document.txt";
    println!("文件名: {}", file_utils::get_filename(file_path));
    println!("文件扩展名: {:?}", file_utils::get_file_extension(file_path));
    
    // 文件大小格式化
    println!("格式化文件大小:");
    println!("1024 bytes = {}", file_utils::format_file_size(1024));
    println!("1048576 bytes = {}", file_utils::format_file_size(1048576));
    println!("1073741824 bytes = {}", file_utils::format_file_size(1073741824));
    
    // Base64处理演示（使用base64库）
    let test_content = "这是一段测试文本内容";
    use base64::{Engine as _, engine::general_purpose};
    let base64_str = general_purpose::STANDARD.encode(test_content);
    println!("Base64编码: {}", base64_str);
    
    let decoded_bytes = general_purpose::STANDARD.decode(&base64_str).unwrap();
    let decoded = String::from_utf8(decoded_bytes).unwrap();
    println!("Base64解码: {}", decoded);
    
    println!();
}